package com.ruoyi.project.dj.service;

import com.ruoyi.project.dj.domain.DjStudyRecord;
import java.util.List;

/**
 * 学习记录Service接口
 *
 * @author ruoyi
 * @date 2025-09-15
 */
public interface IDjStudyRecordService
{
    /**
     * 查询学习记录
     *
     * @param id 学习记录ID
     * @return 学习记录
     */
    public DjStudyRecord selectDjStudyRecordById(Long id);

    /**
     * 查询学习记录列表
     *
     * @param djStudyRecord 学习记录
     * @return 学习记录集合
     */
    public List<DjStudyRecord> selectDjStudyRecordList(DjStudyRecord djStudyRecord);

    /**
     * 新增学习记录
     *
     * @param djStudyRecord 学习记录
     * @return 结果
     */
    public int insertDjStudyRecord(DjStudyRecord djStudyRecord);

    /**
     * 修改学习记录
     *
     * @param djStudyRecord 学习记录
     * @return 结果
     */
    public int updateDjStudyRecord(DjStudyRecord djStudyRecord);

    /**
     * 批量删除学习记录
     *
     * @param ids 需要删除的学习记录ID
     * @return 结果
     */
    public int deleteDjStudyRecordByIds(Long[] ids);

    /**
     * 删除学习记录信息
     *
     * @param id 学习记录ID
     * @return 结果
     */
    public int deleteDjStudyRecordById(Long id);

    /**
     * 根据用户ID、资源类型和资源ID查询学习记录
     *
     * @param memberId 党员ID
     * @param resourceType 资源类型
     * @param resourceId 资源ID
     * @return 学习记录
     */
    public DjStudyRecord selectDjStudyRecordByMemberAndResource(Long memberId, String resourceType, Long resourceId);

    /**
     * 开始学习记录（创建或更新记录）
     *
     * @param memberId 党员ID
     * @param resourceType 资源类型：video-视频，material-材料，audio-有声读物，book-红色书籍，realtime-实时资料
     * @param resourceId 资源ID
     * @return 结果
     */
    public int startStudyRecord(Long memberId, String resourceType, Long resourceId);

    /**
     * 更新学习时长
     *
     * @param memberId 党员ID
     * @param resourceType 资源类型
     * @param resourceId 资源ID
     * @param durationIncrement 增加的学习时长(秒)
     * @param currentPosition 当前学习位置(秒，可选)
     * @return 结果
     */
    public int updateStudyDuration(Long memberId, String resourceType, Long resourceId, 
                                   Integer durationIncrement, Integer currentPosition);

    /**
     * 结束学习记录
     *
     * @param memberId 党员ID
     * @param resourceType 资源类型
     * @param resourceId 资源ID
     * @param finalDuration 最终学习时长(秒)
     * @param finalPosition 最终学习位置(秒，可选)
     * @param isComplete 是否完成学习
     * @return 结果
     */
    public int endStudyRecord(Long memberId, String resourceType, Long resourceId, 
                              Integer finalDuration, Integer finalPosition, boolean isComplete);
}